Skip to main content
Version: 1.0.0

三、启动方式

AIBOX 支持多种启动方式,包括:

  • 从 microSD 启动:预装有操作系统的 microSD
  • 从 eMMC 启动:eMMC 设备经过镜像烧录后启动
  • 从网络 PXE 启动:预装有操作系统的 microSD 或 eMMC
  • 从网络 NFS 启动:预装有操作系统的 microSD 或 eMMC

3.1 microSD 启动​

在提供开发套件时,一般会同时提供一个制作好的 microSD,该卡可以启动开发套件,同时也提供了一些比较基础的可执行程序,您可以通过探索这些程序了解开发套件的基本功能,从而建立对开发套件和 SDK 的初步认知。如果没有制作好的启动卡或需要制作新的启动卡,请参考「AIBOX 快速开始」文档的「制作启动卡」章节 的相关内容。

下面简单介绍一下 microSD 启动卡的分区结构。microSD 卡被划分为多个分区,每个分区对应不同的用途。

3.1.1 启动分区(盘符名 bootfs)​

启动分区用于存储系统启动过程中所需的各类文件,包括引导程序、内核镜像、设备树文件等。该启动分区通常采用 FAT32 文件系统格式,以确保兼容性。启动分区包含的主要文件说明如下:

  • uImage:内核镜像文件
  • boot.bin:引导程序文件
  • tps.dtb:设备树文件
  • fw_jump.bin:固件文件(如果适用)

3.1.2 根文件系统分区(盘符名 rootfs)​

根文件系统分区是 microSD 卡上用于存储操作系统核心文件的重要区域,是文件系统的最高层级目录,包括系统的命令库、配置文件、驱动程序等,根分区通常为 ext4 文件系统格式。

Code block
.
├── bin -> usr/bin # 存放系统的基础命令,如ls、cp、mv等
├── bin.usr-is-merged
├── boot
├── dev # 设备文件,用来与硬件交互
├── etc # 存放系统配置文件,如网络配置、用户配置等
├── home # 存放系统用户的家目录
├── lib -> usr/lib # 存放系统运行所需的共享库文件
├── lib.usr-is-merged
├── media
├── mnt
├── opt
├── proc
├── run
├── sbin -> usr/sbin # 存放系统管理命令
├── sbin.usr-is-merged
├── srv # 存放服务相关的文件
├── sys # 存放系统运行时的信息
├── tmp # 临时文件存放目录
├── usr # 用户应用程序和文件的存放目录
└── var # 存放系统运行时产生的可变数据

完成启动卡制作后,可以参考 「AIBOX 使用技术手册」文档的「开机」章节 的相关内容启动开发套件。

注意:如果用户使用的是 Windows 操作系统,则无需手动管理这些分区,安装程序会自动设置,如果需要手动管理这些分区,可以采用 Windows 操作系统自带的磁盘管理工具进行管理。

3.2 eMMC启动​

需要制作一张 microSD 烧录卡,并把镜像正确烧录到 eMMC,具体烧录步骤可参考 「AIBOX 使用技术手册」文档的「microSD 卡烧录 eMMC 升级」章节 的相关内容。拔出 microSD ,按复位键重启即为 eMMC 启动。

3.3 网络 PXE 启动​

需要制作一张 microSD 烧录卡或者已被正确烧录过的 eMMC,PXE 启动会在仅使用 Boot.fr 和 config.txt 的情况下通过网络去启动系统。 要从网络 PXE 启动,首先需要在电脑端配置 TFTP 和 NFS 服务器,然后开发套件端完成配置并启动。

3.3.1 配置 TFTP 服务器​

sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd
sudo mkdir -p /pxe_server/tftp
sudo chmod 777 /pxe_server/tftp

修改 /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/pxe_server/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"

创建 PXE 目录

sudo mkdir -p /pxe_server/tftp/pxelinux.cfg

创建 PXE 配置文件

在 pxelinux.cfg 目录下创建对应的 PXE 配置文件,文件名格式为 01-xx-xx-xx-xx-xx-xx,其中 01- 为固定字段,后面紧跟开发套件的 MAC 地址。

例如,针对 MAC 地址为 e6:e8:dc:ff:db:da 的开发套件,应创建文件 /pxe_server/tftp/pxelinux.cfg/01-e6-e8-dc-ff-db-da:

default Ubuntu Linux-6.6
menu title ULTIMATE PXE SERVER - By Griffon - Ver 1.0
prompt 0
timeout 0

label Ubuntu Linux-6.6
kernel uImage
initrd rootfs.cpio.uboot

复制镜像文件

将 microSD 卡 bootfs 分区文件 u-boot.bin、uImage、tps.dtb、fw_jump.bin、rootfs.cpio.uboot、Boot.fr 和 overlays 目录复制到 /pxe_server/tftp/ 目录下。在开发时可对应替换为自己的镜像文件。

启动 TFTP 服务器

sudo service tftpd-hpa restart

注意:针对不同开发套件要烧录不同内核镜像和设备树,只需在 pxelinux.cfg 目录下创建对应的 PXE 配置文件即可。

3.3.2 配置 NFS 服务器​

安装 NFS 服务

sudo apt-get install nfs-kernel-server rpcbind

修改 /etc/exports,在文件末尾添加(注意:路径和 * 之间有个空格):

/srv/nfs/rootfs *(rw,sync,no_root_squash)

其中 /srv/nfs/rootfs 为 NFS 文件系统挂载路径。

修改 /etc/default/nfs-kernel-server,在文件末尾添加:

RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"

复制镜像文件

将 microSD 卡 rootfs 分区下所有文件及目录复制到 /srv/nfs/rootfs 目录下。在开发时可对应替换为自己定制的文件系统。

启动 NFS 服务

sudo systemctl restart nfs-kernel-server

3.3.3 配置开发套件​

完成服务器端配置后,需要在开发套件端进行相应的网络启动参数配置。开发套件通过修改 bootfs 分区下的 config.txt 文件来设置网络启动相关参数,具体配置示例如下:

# 使能PXE
force_pxe=true
# 从eth0启动
ethact=eth0
# 服务器IP地址
serverip=192.168.56.99
# NFS文件系统挂载路径
rootpath=/srv/nfs/rootfs

完成配置文件的修改后,重新上电即可通过网络启动系统。启动成功后,启动日志中会看到打印Now switch to pxe boot字样。关于 config.txt 文件中各配置变量的详细说明,请参考 「TacoOS&BSP(AIBOX) 开发技术手册」文档的「config.txt 使用说明」章节 的相关内容。

3.4 网络 NFS 启动​

网络 NFS 启动需要准备一张 microSD 烧录卡或已正确烧录的 eMMC 设备。NFS 启动会在挂载文件系统时通过网络去加载。开发套件端需要修改 bootfs 分区下的 config.txt 文件,具体配置示例如下:

# 必须关闭PXE
force_pxe=false
# 从eth0启动
ethact=eth0
# 服务器IP地址
serverip=192.168.56.99
# NFS文件系统挂载路径
rootpath=/srv/nfs/rootfs
# 使能nfs
nfs=true

完成配置文件的修改后,重新上电即可通过网络挂载文件系统。关于 config.txt 文件中各配置变量的详细说明,请参考 「TacoOS&BSP(AIBOX) 开发技术手册」文档的「config.txt 使用说明」章节 的相关内容。NFS 服务器搭建可参考上述 3.3.2 配置 NFS 服务器 的相关内容。